package cn.iocoder.yudao.module.currency.api.rate;

import cn.iocoder.yudao.module.currency.api.rate.dto.ExchangeRateRespDTO;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;

/**
 * 汇率 API 接口
 * @author cai
 * @date 2024/03/05 23:08
 */
public interface ExchangeRateApi {

    /**
     * 通过编码获取汇率
     * @param currencyCode 货币编码，例如 CNY
     * @return 汇率
     */
    ExchangeRateRespDTO getExchangeRate(String currencyCode);

    ExchangeRateRespDTO getExchangeRate(String baseCode, String targetCode);

    /**
     * 获取可用货币列表
     * @return 货币列表
     */
    List<ExchangeRateRespDTO> getAvailableCurrencyList();

    /**
     * 获取可用货币列表
     * @return 货币列表
     */
    List<ExchangeRateRespDTO> getListByCode(Collection<String> currencyCodes);

    /**
     * 获取支付货币
     * @return 支付货币
     */
    String getPaymentCurrency();

    /**
     * 计算附带汇率的金额
     * @param value 金额，单位：分
     * @param currencyCode 货币编码
     * @return 计算后的金额，单位：分
     */
    Integer calculateWithCurrency(Integer value, String currencyCode);

    /**
     * 计算附带汇率的金额
     * @param value 金额，单位：分
     * @param rate 汇率
     * @return 计算后的金额，单位：分
     */
    Integer calculateWithRate(Integer value, BigDecimal rate);


    BigDecimal reverseRate(BigDecimal rate);

}
